home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
076-100
/
disk_097
/
splines
/
sprt.c
< prev
Wrap
C/C++ Source or Header
|
1992-05-06
|
8KB
|
249 lines
/* The routines in this file are copyright (c) 1987 by Helene (Lee) Taran.
* Permission is granted for use and free distribution as long as the
* original author's name is included with the code.
*/
#include "spline.h"
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct LayersBase *LayersBase;
void *OpenLibrary();
void *OpenWindow();
void *OpenScreen();
USHORT pointimage[] = /* what a control point will look like */
{0x0000, 0x0000, 0x1c00, 0x3e00, 0x3e00, 0x3e00, 0x1c00 };
struct Image control_image =
{ -4,-4,7,7, 1, &pointimage[0], 0x1, 0x0, NULL};
USHORT ColorTable[COLORCOUNT] = /* Here are the actual colors used */
{
0x0000, /* black */
0x0063, /* greenish */
0x0f24, /* redish */
0x000f, /* blue */
};
struct NewWindow WindowInfo =
{ WINDOW_LEFT, /* Left Edge */
WINDOW_TOP, /* Top Edge */
WINDOW_WIDTH, /* Initial Width (640 =Hires) */
WINDOW_HEIGHT, /* Initial Height (400 = interlaced) */
-1, /* DetailPen (-1 = use screen's) */
-1, /* BlockPen (-1 = use screen's) */
MOUSEBUTTONS | CLOSEWINDOW , /* <-- IDCMP flags; \/ window flags */
SMART_REFRESH | WINDOWCLOSE| ACTIVATE | REPORTMOUSE,
NULL, /* First Gadget */
NULL, /* CheckMark (used with menus) */
(UBYTE *)"Splines", /* Title */
NULL, /* Screen (null = default) */
NULL, /* BitMap */
1, /* MinWidth (0 = initial value) */
1, /* MinHeight (0 = initial value) */
0, /* MaxWidth (0 = initial value) */
0, /* MaxHeight (0 = initial value) */
CUSTOMSCREEN, /* Type */
};
/* The following structure gives all the information that Intuition
* needs to maintain a customized screen.
*/
struct NewScreen ScreenInfo =
{
0,0, /* Left Edge, Top Edge */
SCREEN_WIDTH,SCREEN_HEIGHT, /* Screen Width & Height */
DEPTH, /* Number of bit-planes */
DETAILPEN, /* Detail Pen color register */
BLOCKPEN, /* Background color register */
VIEWMODE, /* ViewMode */
CUSTOMSCREEN, /* Type */
NULL, /* Font : null = use default */
(UBYTE *)"Splines and PopUp Menus: by Lee Taran", /* Screen Title */
NULL, /* Gadgets */
NULL /* CustomBitMap */
};
/* Bits to keep track of anything that must eventually be deallocated */
int OpenBits = 0x0000;
/* Intuition structures that will be used to setup the background
* environment.
*/
struct Window *Window;
struct Screen *Screen;
struct Layer_Info *Layer_Info;
struct PopUp_Menu PointMenu, CurveMenu;
struct PopUp_Item PointItem[] = {
{ "Add Point After", ADD_AFTER, 1,1,0,0,DETAILPEN,NULL},
{ "Add Point Before", ADD_BEFORE, 1,2,0,0,DETAILPEN,NULL},
{ "Move This Point", MOVE_POINT, 1,2,0,0,DETAILPEN,NULL},
{ "Remove This Point",REMOVE_POINT,1,2,0,0,DETAILPEN,NULL}
};
struct PopUp_Item CurveItem[] = {
{ "Open B-Spline Natural Ends", OPENB_NATURAL, 1,2,0,0,DETAILPEN,NULL},
{ "Open B-Spline Triple Knots", OPENB_TRIPLE, 1,2,0,0,DETAILPEN,NULL},
{ "Open Interpolating Spline", OPEN_INTRPL, 1,2,0,0,DETAILPEN,NULL},
{ "Closed B-Spline", CLOSEDB, 1,2,0,0,DETAILPEN,NULL},
{ "Closed Interpolating Spline",CLOSED_INTRPL, 1,2,0,0,DETAILPEN,NULL},
{ "Toggle AFrame", TOGGLEAFRAME, 1,2,0,0,DETAILPEN,NULL},
{ "Redraw", REDRAW, 1,2,0,0,DETAILPEN,NULL} ,
{ " GET ME OUT OF HERE!!", QUIT, 1,5,0,0,OUTLINEPEN,NULL},
};
Init_PointMenu ()
{
PointItem[0].next = &PointItem[1];
PointItem[1].next = &PointItem[2];
PointItem[2].next = &PointItem[3];
PointMenu.depth = 2;
PointMenu.width = 100; /* minimum width */
PointMenu.deactivate = SELECTUP;
PointMenu.outline_color = OUTLINEPEN;
PointMenu.area_color = BLOCKPEN;
PointMenu.first_item = &PointItem[0];
if (!Init_PopUp_Menu(&PointMenu)) panic(POPUP_MENU);
}
Init_CurveMenu ()
{
CurveItem[0].next = &CurveItem[1];
CurveItem[1].next = &CurveItem[2];
CurveItem[2].next = &CurveItem[3];
CurveItem[3].next = &CurveItem[4];
CurveItem[4].next = &CurveItem[5];
CurveItem[5].next = &CurveItem[6];
CurveItem[6].next = &CurveItem[7];
CurveMenu.depth = 2;
CurveMenu.width = 100; /* minimum width */
CurveMenu.deactivate = SELECTUP;
CurveMenu.outline_color = OUTLINEPEN;
CurveMenu.area_color = BLOCKPEN;
CurveMenu.first_item = &CurveItem[0];
if (!Init_PopUp_Menu(&CurveMenu)) panic(POPUP_MENU);
}
OpenLibraries ()
{
/* Open the Intuition library -- connect to the routines in ROM
* If the result is NULL then something went wrong so exit immediately
*/
if (!(IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library",INTUITION_VERSION)))
panic(INTUITION);
else OpenBits |= INTUITION;
/* Open the Graphics Library -- so that we can use the bit-map
* facilities of our window.
*/
if (!(GfxBase = (struct GfxBase *)
OpenLibrary("graphics.library",GFX_VERSION)))
panic(GRAPHICS);
else OpenBits |= GRAPHICS;
if (!(LayersBase = (struct LayersBase *)
OpenLibrary("layers.library",LAYERS_VERSION)))
panic(LAYERS);
else OpenBits |= LAYERS;
}
/* SetupEnvironment : initializes the screen and window that
* will be used. Assumes that all libraries have already been opened
*/
SetupEnvironment()
{ struct RastPort *RPort;
if (!Init_MenuPackage()) panic(MENU_PACKAGE);
Init_PointMenu();
Init_CurveMenu();
/* Open a customized Screen */
if (!(Screen = (struct Screen *)OpenScreen(&ScreenInfo)))
panic(SCREEN);
else OpenBits |= SCREEN;
WindowInfo.Screen = Screen;
/* Open A window in the new Window */
if (!(Window = (struct Window *)OpenWindow(&WindowInfo)))
panic(WINDOW);
else OpenBits |= WINDOW;
/* set up window colors */
LoadRGB4(ViewPortAddress(Window),&ColorTable,COLORCOUNT);
SetRast(Window->RPort,ERASE); /* wipe out everything -- no title bar */
}
/* panic: Prints out an error message about what went wrong during the
* setup/initialization phase of this program and ends the program
* gracefully by calling close_things before exiting with an error code
*/
panic(error_code)
int error_code;
{
switch (error_code)
{
case LAYERS :
fprintf(stderr,"splines: couldn't open layers library [%d]\n",
LAYERS_VERSION);
break;
case POPUP_MENU :
fprintf(stderr,"splines: couldn't allocate popup menu\n");
break;
case MENU_PACKAGE :
fprintf(stderr,"splines: couldn't initialize menu package\n");
break;
case INTUITION :
fprintf(stderr,"splines: couldn't find Intuition Library [%d]\n",
INTUITION_VERSION);
break;
case GRAPHICS :
fprintf(stderr,"splines: couldn't find Graphics Library [%d]\n",
GFX_VERSION);
break;
case SCREEN :
fprintf(stderr,"splines: couldn't open Custom Screen.\n");
break;
case WINDOW :
fprintf(stderr,"splines: couldn't open Window.\n");
break;
}
close_things();
exit(error_code);
}
/* close_things : closes the Libraries that have been opened and
* frees up whatever memory has been used.
*/
close_things()
{
Dispose_PopUp(&PointMenu);
Dispose_PopUp(&CurveMenu);
Close_MenuPackage();
if (OpenBits & WINDOW) CloseWindow(Window);
if (OpenBits & SCREEN) CloseScreen(Screen);
if (OpenBits & LAYERS) CloseLibrary(LayersBase);
if (OpenBits & GRAPHICS) CloseLibrary(GfxBase);
if (OpenBits & INTUITION) CloseLibrary(IntuitionBase);
}